import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体，确保在任何系统都能正常显示中文
def setup_chinese_font():
    """设置matplotlib支持中文显示"""
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans', 'Bitstream Vera Sans']
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

def plot_errors(average_errors, max_errors, save_filename):
    """
    绘制平均误差和最大误差图表，供外部模块调用
    
    参数:
    average_errors: list或numpy数组，平均误差数据
    max_errors: list或numpy数组，最大误差数据
    save_filename: str，图表保存的文件名（支持png、jpg、pdf等格式）
    
    返回:
    bool: 图表绘制成功返回True，失败返回False
    """
    # 确保输入是数组格式
    average_errors = np.array(average_errors)
    max_errors = np.array(max_errors)
    
    # 确保数据长度一致
    if len(average_errors) != len(max_errors):
        print("错误：平均误差和最大误差数据长度不一致！")
        return False
    
    # 确保数据非空
    if len(average_errors) == 0:
        print("错误：输入的误差数组为空！")
        return False
    
    # 设置中文显示
    setup_chinese_font()
    
    # 创建x轴数据
    x = np.arange(len(average_errors))
    
    # 创建图表
    plt.figure(figsize=(10, 6))
    
    # 绘制平均误差曲线
    plt.plot(x, average_errors, label='平均误差', linewidth=2, marker='o', markersize=5, color='#1f77b4')
    
    # 绘制最大误差曲线
    plt.plot(x, max_errors, label='最大误差', linewidth=2, marker='s', markersize=5, color='#ff7f0e')
    
    # 设置图表标题和坐标轴标签
    plt.title('误差趋势图', fontsize=16, fontweight='bold')
    plt.xlabel('数据点索引', fontsize=12)
    plt.ylabel('误差值', fontsize=12)
    
    # 添加图例
    plt.legend(fontsize=10, loc='best')
    
    # 添加网格线，提高可读性
    plt.grid(True, linestyle='--', alpha=0.7)
    
    # 设置坐标轴刻度字体大小
    plt.tick_params(axis='both', which='major', labelsize=10)
    
    # 调整布局，避免标签被截断
    plt.tight_layout()
    
    # 保存图表
    plt.savefig(save_filename, dpi=300, bbox_inches='tight')
    plt.close()
    
    print(f"图表已成功保存为：{save_filename}")
    return True
